{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from gensim.models import word2vec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "file_name = 'train_querylist_writefile-1w.csv'\n",
    "cur_model = gensim.models.Word2Vec.load('20w_size_win100_300.model')\n",
    "with open(file_name, 'r') as f:\n",
    "    cur_index = 0\n",
    "    lines = f.readlines()\n",
    "    doc_cev = np.zeros((len(lines),300))\n",
    "    for line in lines:\n",
    "        word_vec = np.zeros((1,300))\n",
    "        words = line.strip().split(' ')\n",
    "        wrod_num = 0\n",
    "        for word in words:\n",
    "            if word in cur_model:\n",
    "                wrod_num += 1\n",
    "                word_vec += np.array([cur_model[word]])\n",
    "        doc_cev[cur_index] = word_vec / float(wrod_num)\n",
    "        cur_index += 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9988, 300)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "doc_cev.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.33182368,  0.55252966,  0.63669818,  0.00209563,  0.05348139,\n",
       "       -0.19718801,  0.0736446 ,  0.32822171,  0.18450843,  0.53490043,\n",
       "        0.16007615,  0.01593239, -0.75761003, -0.20746806, -0.22237793,\n",
       "       -0.34965017, -0.06830732,  0.03833664, -0.41728927, -0.49847602,\n",
       "       -0.15014577,  0.36489224, -0.01786399,  0.43068594, -0.03712102,\n",
       "       -0.15087827, -0.37784922,  0.36978041, -0.50218117,  0.02682012,\n",
       "       -0.52849729, -0.28924009,  0.61358333, -0.34677243, -0.09515623,\n",
       "       -0.15804055,  0.30000075, -0.19565529,  0.37209247, -0.63398634,\n",
       "       -0.2731103 , -0.26805587,  0.11133715,  0.44562418, -0.00714147,\n",
       "       -0.57793753,  0.06985141,  0.24699661, -0.16827831,  0.0693375 ,\n",
       "       -0.26619998,  0.25219051,  0.20520646, -0.54850182,  0.49025904,\n",
       "        0.26579061, -0.13549178,  0.19110944, -0.08072405,  0.15693008,\n",
       "        0.32124069,  0.1143565 , -0.27793777, -0.21445868,  0.13913571,\n",
       "       -0.37103528, -0.56686346, -0.1686514 , -0.14588745,  0.46489141,\n",
       "       -0.05348393, -0.39270203, -0.25076774, -0.23778724,  0.07544403,\n",
       "       -0.50193936, -0.58918561, -0.37106401, -0.22888205,  0.19543051,\n",
       "        0.13435451,  0.20850165,  0.57685213,  0.46324869,  0.05403519,\n",
       "       -0.77954328, -0.16153172,  0.41048316, -0.46591351, -0.18200349,\n",
       "        0.67509917,  0.05909903,  0.14659577, -0.22202072, -0.69821685,\n",
       "       -0.61462538, -0.01118196,  0.61272961, -0.15235076,  0.26032444,\n",
       "        0.1175552 ,  0.32030819, -0.42275648,  0.1650992 ,  0.40099823,\n",
       "        0.1737241 ,  0.03918045,  0.12848079,  0.50896752, -0.17437159,\n",
       "        0.59802324, -0.19673867,  0.27646246,  0.06625795,  0.25715591,\n",
       "       -0.29568531,  0.0563262 ,  0.1350048 ,  0.23280326,  0.19045037,\n",
       "       -0.38035261,  0.05304222,  0.27522449, -0.12088178, -0.34537354,\n",
       "        0.19603959,  0.09897907, -0.55989173, -0.21414708,  0.23768777,\n",
       "        0.08089199,  0.45118171,  0.40441429, -0.37938577,  0.11321586,\n",
       "       -0.78164687,  0.09522659, -0.49335691,  0.65763007, -0.05582092,\n",
       "       -0.43615372, -0.13909474,  0.25912549,  0.38708076,  0.05181426,\n",
       "        0.50749369, -0.44233476,  0.03923613, -0.33863993, -0.23971594,\n",
       "       -0.05281234,  0.04994444,  0.32139697, -0.05746405,  0.15891093,\n",
       "        0.17589508, -0.6689432 , -0.77728936, -0.22874011, -0.17997937,\n",
       "       -0.03920563, -0.33361198, -0.0913855 , -0.54737029,  0.1766914 ,\n",
       "       -0.09496386,  0.02547032,  0.14155027,  0.2726024 ,  0.22773679,\n",
       "        0.70578234, -0.14757835, -0.02492926, -0.16810223, -0.19386815,\n",
       "       -0.22731419, -0.58005768, -0.02521431, -0.05701891,  0.39817653,\n",
       "       -0.04636694, -0.12507841, -0.47318447,  0.70156724,  0.09911417,\n",
       "        0.33301143, -0.5366442 ,  0.25444337,  0.55563975, -0.27822748,\n",
       "       -0.08091258, -0.02902109,  0.45780695, -0.05332535, -0.13549121,\n",
       "        0.04146088,  0.21186687, -0.60914561, -0.13756421,  0.15332513,\n",
       "       -0.03401803,  0.24444518, -0.34899555,  0.01449729, -0.16914928,\n",
       "       -0.10449218, -0.03948724,  0.05543015,  0.16946971, -0.03953215,\n",
       "        0.36282383, -0.22299126, -0.37767637,  0.40729367,  0.09319797,\n",
       "       -0.05661254,  0.31285458, -0.59728654,  0.04649072, -0.2139158 ,\n",
       "        0.02466388, -0.25535453,  0.05328107,  0.44968932, -0.36304227,\n",
       "        0.1243279 ,  0.25542351, -0.25990573,  0.16575788,  0.49486594,\n",
       "        0.02013198, -0.44703869, -0.03417336, -0.18894175,  0.44422598,\n",
       "        0.26544032,  0.24729575,  0.12377638,  0.17241733,  0.36392018,\n",
       "       -0.04283091,  0.10438793, -0.08287631,  0.07021099, -0.41427204,\n",
       "        0.08878438,  0.13423769, -0.21752153,  0.29810518, -0.17300779,\n",
       "       -0.01755171, -0.23126622, -0.37296119, -0.24134189, -0.12355118,\n",
       "       -0.01502559, -0.107764  ,  0.26370159,  0.69973508, -0.08179363,\n",
       "        0.30354089,  0.47628052, -0.27104121, -0.14209931,  0.24028155,\n",
       "        0.21986929,  0.44981002,  0.03972871,  0.18570216, -0.11363009,\n",
       "       -0.21989397,  0.37386405, -0.17552514, -0.36266325,  0.33665742,\n",
       "        0.49293262,  0.73631816, -0.23181501, -0.13128777, -0.07689603,\n",
       "        0.01339131, -0.3737787 , -0.69349323, -0.22885342,  0.01278608,\n",
       "        0.2057562 , -0.00495967,  0.22957659,  0.5245037 , -0.20172307,\n",
       "        0.03941859, -0.51391135,  0.03211874, -0.03925369,  0.14479598,\n",
       "        0.43408511, -0.07843929, -0.33596287,  0.0743809 ,  0.09895382])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "doc_cev[5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9988,)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "genderlabel = np.loadtxt(open('train_gender.csv', 'r')).astype(int)\n",
    "genderlabel.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(9756, 300) (9756,)\n"
     ]
    }
   ],
   "source": [
    "def removezero(x, y):\n",
    "        nozero = np.nonzero(y)\n",
    "        y = y[nozero]\n",
    "        x = np.array(x)\n",
    "        x = x[nozero]\n",
    "        return x, y\n",
    "gender_train, genderlabel = removezero(doc_cev, genderlabel)\n",
    "print (gender_train.shape,genderlabel.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import itertools\n",
    "def plot_confusion_matrix(cm, classes,\n",
    "                          title='Confusion matrix',\n",
    "                          cmap=plt.cm.Blues):\n",
    "    \"\"\"\n",
    "    This function prints and plots the confusion matrix.\n",
    "    \"\"\"\n",
    "    plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
    "    plt.title(title)\n",
    "    plt.colorbar()\n",
    "    tick_marks = np.arange(len(classes))\n",
    "    plt.xticks(tick_marks, classes, rotation=0)\n",
    "    plt.yticks(tick_marks, classes)\n",
    "\n",
    "    thresh = cm.max() / 2.\n",
    "    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
    "        plt.text(j, i, cm[i, j],\n",
    "                 horizontalalignment=\"center\",\n",
    "                 color=\"white\" if cm[i, j] > thresh else \"black\")\n",
    "\n",
    "    plt.tight_layout()\n",
    "    plt.ylabel('True label')\n",
    "    plt.xlabel('Predicted label')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.79868798688\n",
      "Recall metric in the testing dataset:  0.805637982196\n",
      "accuracy metric in the testing dataset:  0.79868798688\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nz/azAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x19ce12eab70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "LR_model = LogisticRegression(class_weight='balanced', random_state=0,penalty='l1')\n",
    "\n",
    "LR_model.fit(gender_train,genderlabel)\n",
    "y_pred = LR_model.predict(gender_train)\n",
    "print (LR_model.score(gender_train,genderlabel))\n",
    "cnf_matrix = confusion_matrix(genderlabel,y_pred)\n",
    "\n",
    "print(\"Recall metric in the testing dataset: \", cnf_matrix[1,1]/(cnf_matrix[1,0]+cnf_matrix[1,1]))\n",
    "\n",
    "print(\"accuracy metric in the testing dataset: \", (cnf_matrix[1,1]+cnf_matrix[0,0])/(cnf_matrix[0,0]+cnf_matrix[1,1]+cnf_matrix[1,0]+cnf_matrix[0,1]))\n",
    "\n",
    "# Plot non-normalized confusion matrix\n",
    "class_names = [0,1]\n",
    "plt.figure()\n",
    "plot_confusion_matrix(cnf_matrix\n",
    "                      , classes=class_names\n",
    "                      , title='Confusion matrix')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
